#include <stdio.h>

int main(void)
{
   int pid, ppid, status;

   pid=getpid();
   ppid=getppid();
   printf("\n\n FATHER PARAM: pid=%i  ppid=%i \n", pid,ppid);

   /* Ситуация 1: ожидаем завершения дочернего процесса, как положено */
   if(fork()==0) execl("son.out","son", NULL);
   printf("Case 1: normal child termination\n");
   system("ps f");
   wait(&status);
   system("ps f");

   /* Ситуация 2: порождаем процесс-зомби, не дожидаясь выполнения сына */
   if(fork()==0) execl("son.out","son", NULL);
   printf("Case 2: creation of zombie process\n");
   system("ps f");
   sleep(5);
   system("ps f");

   /* Ситуация 3: дочерний процесс меняет свой PPID, если родительский 
    * завершился раньше */
   if(fork()==0) execl("son.out","son", NULL);
   printf("Case 3: child process changed its PPID\n");
   system("ps f");
   return 0;
}   

